﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Metadados;
using MySql.Data.MySqlClient;
using System.Data;


namespace Dados
{
    public class DBProduto
    {
        private ConexaoMYSQL objConexao = new ConexaoMYSQL();

        public bool incluir(Produto obj)
        {
            bool blnRetorno = false;

            string strSql = "INSERT INTO Produto (proCodigo,proDescricao,proCodigoBarra,proNcm,undCodigo)" +
                         " VALUES (@p_proCodigo,@p_proDescricao,@p_proCodigoBarra,@p_proNcm,@p_undCodigo)";

            List<MySqlParameter> objParams = new List<MySqlParameter>();
            objParams.Add(new MySqlParameter("@p_proCodigo", obj.proCodigo));
            objParams.Add(new MySqlParameter("@p_proDescricao", obj.proDescricao));
            objParams.Add(new MySqlParameter("@p_proCodigoBarra", obj.proCodigoBarra));
            objParams.Add(new MySqlParameter("@p_proNcm", obj.proNcm));
            objParams.Add(new MySqlParameter("@p_undCodigo", obj.undCodigo));

            blnRetorno = objConexao.executarComando(strSql, objParams);

            return blnRetorno;
        }

        public bool atualizar(Produto obj)
        {
            bool blnRetorno = false;

            string strSql = "UPDATE Produto SET proDescricao = @p_proDescricao, proCodigoBarra = @p_proCodigoBarra" +
                            " ,proNcm = @p_proNcm, undCodigo = @p_undCodigo WHERE proCodigo = @p_proCodigo";

            List<MySqlParameter> objParams = new List<MySqlParameter>();
            objParams.Add(new MySqlParameter("@p_proDescricao", obj.proDescricao));
            objParams.Add(new MySqlParameter("@p_proCodigoBarra", obj.proCodigoBarra));
            objParams.Add(new MySqlParameter("@p_proNcm", obj.proNcm));
            objParams.Add(new MySqlParameter("@p_undCodigo", obj.undCodigo));
            objParams.Add(new MySqlParameter("@p_proCodigo", obj.proCodigo));

            blnRetorno = objConexao.executarComando(strSql, objParams);

            return blnRetorno;
        }

        public bool excluir(int p_proCodigo)
        {
            bool blnRetorno = false;

            string strSql = "DELETE FROM Produto WHERE proCodigo = @p_proCodigo";

            List<MySqlParameter> objParams = new List<MySqlParameter>();
            objParams.Add(new MySqlParameter("@p_proCodigo", p_proCodigo));

            blnRetorno = objConexao.executarComando(strSql, objParams);

            return blnRetorno;
        }

        public List<Produto> consultar(int p_proCodigo)
        {
            string strSql = "SELECT proCodigo, proDescricao, proCodigoBarra, proNcm, undCodigo FROM Produto " +
                            "WHERE proCodigo = @p_proCodigo";
            List<MySqlParameter> objParams = new List<MySqlParameter>();
            objParams.Add(new MySqlParameter("@p_proCodigo", p_proCodigo));

            DataTable objTbProdutos = objConexao.retornarTabela(strSql, objParams, "Produto");

            List<Produto> objProdutos = new List<Produto>();
            foreach (DataRow row in objTbProdutos.Rows)
            {
                Produto objProduto = new Produto();
                objProduto.proCodigo = (int)row["proCodigo"];
                objProduto.proDescricao = (string)row["proDescricao"];
                objProduto.proCodigoBarra = (string)row["proCodigoBarra"];
                objProduto.proNcm = (string)row["proNcm"];
                objProduto.undCodigo = (int)row["undCodigo"];

                objProdutos.Add(objProduto);
            }

            return objProdutos;
        }

        public DataView listar(string p_proDescricao)
        {
            string strSql = "SELECT * FROM Produto WHERE proCodigo <> 0 ";

            List<MySqlParameter> objParams = new List<MySqlParameter>();

            if (p_proDescricao.Trim() != "")
            {
                strSql += "AND proDescricao LIKE @p_proDescricao";
                objParams.Add(new MySqlParameter("@p_proDescricao", "%" + p_proDescricao + "%"));
            }

            DataTable objTbProdutos = new DataTable();

            objTbProdutos = objConexao.retornarTabela(strSql, objParams, "Produto");

            return objTbProdutos.DefaultView;
        }

        public DataView listarProdutos(string nomeCampo, string tipoCampo, string descricao)
        {
            {
                string strSql = " SELECT * FROM (SELECT procodigo as Codigo ";
                strSql += " ,proDescricao as Descricao ";
                strSql += " ,proCodigoBarra as Barra ";
                strSql += " ,proNcm as NCM ";
                strSql += " ,undSigla  as Und";
                strSql += " FROM Produto";
                strSql += " INNER JOIN Unidade ON Unidade.undCodigo = Produto.undCodigo";
                strSql += " WHERE proCodigo <> 0";
                List<MySqlParameter> objParams = new List<MySqlParameter>();

                if (nomeCampo.Trim() != "")
                {
                    if (tipoCampo.Trim() != "" | tipoCampo.Trim() != "Todos")
                    {
                        if (tipoCampo.Trim() == "number")
                        {
                            strSql += " AND " + nomeCampo + " = @nomeCampo";
                            objParams.Add(new MySqlParameter("@nomeCampo", descricao));
                        }
                        if (tipoCampo.Trim() == "string")
                        {
                            strSql += " AND " + nomeCampo + " LIKE @nomeCampo";
                            objParams.Add(new MySqlParameter("@nomeCampo", "%" + descricao + "%"));
                        }
                    }
                    
                }

                strSql += ") AS Produto ";
                strSql += " ORDER BY Descricao";

                DataTable objTbProdutos = new DataTable();

                objTbProdutos = objConexao.retornarTabela(strSql, objParams, "Produto");

                return objTbProdutos.DefaultView;
            }
        }

    }
}
